// 导入db模块
const db = require('../db/index')

// 发布评论处理函数
exports.publishcomment = (req, res) => {
  // 判断req.body.rank层级为1，就直接插入就行，为2的话需要再去改变reply_count字段+1
  if (req.body.ranks === 2) {
    // 定义更改reply_count字段语句 根据被回复者的第一层id而不是被回复者的id
    const updateSql = 'update wall_comment set reply_count=reply_count+1 where id=?'
    db.query(updateSql, req.body.tallest_id, (err, result) => {
      if (err) return res.cc(err)
      if (result.affectedRows !== 1) return res.cc('更改失败,请稍后再试')
    })
  }
  // 定义插入语句
  const sql = 'insert into wall_comment set?'
  db.query(sql, req.body, (err, result) => {
    if (err) return res.cc(err)
    if (result.affectedRows !== 1) return res.cc('发布失败,请稍后再试')
    // 通知用户有人评论了你的墙
    res.send({
      code: 200,
      message: '发布成功'
    })
  })
}
// 获取相应墙的评论处理函数 根据墙的id获取时间降序数据
exports.getcommentByid = (req, res) => {
  // 定义查询语句
  const sql = 'select * from wall_comment where walls_id=? and ranks=1 order by timer desc limit ?,5'
  db.query(sql, [req.params.id, req.params.num * 1], (err, result) => {
    if (err) return res.cc(err)
    res.send({
      code: 200,
      message: '查询成功',
      data: result
    })
  })
}
// 根据id获取二级的评论处理函数
exports.getreplyByid = (req, res) => {
  // 定义查询语句 根据一级tallest_id来查询 最多获取20条数据
  const sql = 'select * from wall_comment where tallest_id=? and ranks=2 order by timer desc LIMIT 20'
  db.query(sql, req.params.id, (err, result) => {
    if (err) return res.cc(err)
    res.send({
      code: 200,
      message: '查询成功',
      data: result
    })
  })
}
// 获取相应墙的评论处理函数 根据墙的id获取热度hint数据
exports.getcommentByhint = (req, res) => {
  // 定义查询语句 根据墙的id获取热度降序数据
  const sql = 'select * from wall_comment where walls_id=? and ranks=1 order by reply_count * 1 desc limit ?,5'
  db.query(sql, [req.params.id, req.params.num * 1], (err, result) => {
    if (err) return res.cc(err)
    res.send({
      code: 200,
      message: '查询成功',
      data: result
    })
  })
}
// 修改点赞信息处理函数
exports.updatelike = (req, res) => {
  // 查询该用户是否点赞
  const sql = 'select * from wall_like where uuId=? and walls_id=?'
  db.query(sql, [req.user.id, req.body.walls_id], (err, result) => {
    if (err) return res.cc(err)
    // 如果等于1，说明该用户点赞了此篇文章，需要取消点赞
    if (result.length === 1) {
      // 判断用户的状态码为
      if (result[0].status === 1) {
        // 说明用户想取消点赞 修改点赞表状态码
        const updatesql = 'update wall_like set status=0 where uuId=? and walls_id=?'
        db.query(updatesql, [req.user.id, req.body.walls_id], (err, result) => {
          if (err) return res.cc(err)
          if (result.affectedRows !== 1) return res.cc('点赞或取消点赞失败，请稍后重试')
          // 还需要修改文章总点赞数
          const updateSql = 'update wall_walls set like_count=like_count-1 where id=?'
          db.query(updateSql, req.body.walls_id, (err, result) => {
            if (err) return res.cc(err)
            if (result.affectedRows !== 1) return res.cc('点赞数修改失败')
            res.send({
              code: 200,
              message: '取消点赞成功',
              data: { islike: false }
            })
          })
        })
      } else if (result[0].status === 0) {
        // 说明用户想取消过点赞，想重新点赞
        const updatesql = 'update wall_like set status=1 where uuId=? and walls_id=?'
        db.query(updatesql, [req.user.id, req.body.walls_id], (err, result) => {
          if (err) return res.cc(err)
          if (result.affectedRows !== 1) return res.cc('点赞或取消点赞失败，请稍后重试')
          // 还需要修改文章总点赞数
          const updateSql = 'update wall_walls set like_count=like_count+1 where id=?'
          db.query(updateSql, req.body.walls_id, (err, result) => {
            if (err) return res.cc(err)
            if (result.affectedRows !== 1) return res.cc('点赞数修改失败')
            res.send({
              code: 200,
              message: '点赞成功',
              data: { islike: true }
            })
          })
        })
      }
    }
    // 如果等于0，说明该用户还未点赞了此篇文章
    if (result.length === 0) {
      const sql = 'insert into wall_like set?'
      db.query(sql, req.body, (err, result) => {
        if (err) return res.cc(err)
        if (result.affectedRows !== 1) return res.cc('点赞插入失败,请稍后重试')
        // 修改点赞总数
        const updateSql = 'update wall_walls set like_count=like_count+1  where id=?'
        db.query(updateSql, req.body.walls_id, (err, result) => {
          if (err) return res.cc(err)
          if (result.affectedRows !== 1) return res.cc('点赞数修改失败')
          res.send({
            code: 200,
            message: '点赞成功',
            data: { islike: true }
          })
        })
      })
    }
  })
}
// 举报墙处理函数
exports.reportwalls = (req, res) => {
  // 我们需要把个人uuId添加到传入的参数中
  req.body.uuId = req.user.id
  // 定义插入语句
  const sql = 'insert into wall_report set?'
  db.query(sql, req.body, (err, result) => {
    if (err) return res.cc(err)
    if (result.affectedRows !== 1) return res.cc('举报失败,请稍后再试')
    res.send({
      code: 200,
      message: '举报成功,感谢你的反馈'
    })
  })
}
// 加入喜欢的处理函数
exports.joinlikeByid = (req, res) => {
  // 需要将我们token中的id加入到前端传入的数据中
  req.body.myId = req.user.id
  // 我们应该查询一下用户是否已经加入过喜欢
  const selectSql = 'select * from wall_collect where myId=? and walls_id=?'
  db.query(selectSql, [req.user.id, req.body.walls_id], (err, result) => {
    if (err) return res.cc(err)
    if (result.length === 0) {
      // 说明用户没有加入喜欢过这片文章
      // 定义插入语句
      const sql = 'insert into wall_collect set?'
      db.query(sql, req.body, (err, result) => {
        if (err) return res.cc(err)
        if (result.affectedRows !== 1) return res.cc('加入喜欢失败,请稍后再试')
        res.send({
          code: 200,
          message: '加入喜欢成功,可前往我的喜欢查看'
        })
      })
    }
    if (result.length === 1) res.cc('你已经添加过该文章！可前往我的喜欢中删除')
    if (result.length > 1) res.cc('加入喜欢失败')
  })
}